package vista.juego;

import control.juego.ControlCrimen;
import vista.HerramientasConsola;
import modelo.caracteristicas.Cabello;
import modelo.caracteristicas.Hobby;
import modelo.caracteristicas.Senia;
import modelo.caracteristicas.Sexo;
import modelo.caracteristicas.Vehiculo;
import modelo.juego.Juego;

public class VistaCrimenConsola {

	private Juego juego;
	private ControlCrimen controlCrimen;
	
	public VistaCrimenConsola(Juego juego) {
		this.juego = juego;
		this.controlCrimen = new ControlCrimen(juego.getJugadorActual());
	}

	public void mostrar() {
		HerramientasConsola.imprimir("Bienvenido " + this.juego.getJugadorActual().getRango().getNombre() + " "
				+ this.juego.getJugadorActual().getNombre());
		this.mostrarDatosGuardados();
	}

	private void mostrarDatosGuardados() {
		
		if(this.juego.getJugadorActual().getInvestigacion().tieneOrdenDeArresto())
			this.mostrarSospechoso();
		else 
			this.mostrarDatosRecolectados();
		
		
	}

	private void mostrarSospechoso() {
		HerramientasConsola.imprimir("Tiene una orden de arresto para " +
				this.juego.getJugadorActual().getInvestigacion().getOrdenArresto().getLadronBuscado().getNombre());
		HerramientasConsola.pedirCualquierTeclaParaContinuar();
	}

	private void mostrarDatosRecolectados() {
		String textoSexo = "";
		String textoHobby = "";
		String textoVehiculo = "";
		String textoSenia = "";
		String textoCabello = "";
		
		Sexo sexoGuardado = this.juego.getJugadorActual().getInvestigacion().getDatosLadron().getSexo();
		if(sexoGuardado != null)
			textoSexo = sexoGuardado.name();
		
		Senia seniaGuardada = this.juego.getJugadorActual().getInvestigacion().getDatosLadron().getSenia();
		if(seniaGuardada != null)
			textoSenia = seniaGuardada.name();
		
		Hobby hobbyGuardado = this.juego.getJugadorActual().getInvestigacion().getDatosLadron().getHobby();
		if(hobbyGuardado != null)
			textoHobby = hobbyGuardado.name();
		
		Vehiculo vehiculoGuardado = this.juego.getJugadorActual().getInvestigacion().getDatosLadron().getVehiculo();
		if(vehiculoGuardado != null)
			textoVehiculo = vehiculoGuardado.name();
		
		Cabello cabelloGuardado = this.juego.getJugadorActual().getInvestigacion().getDatosLadron().getCabello();
		if(cabelloGuardado != null)
			textoCabello = cabelloGuardado.name();
		
		HerramientasConsola.imprimir("Ingrese opcion, puede modificar los datos guardados: ");
		HerramientasConsola.imprimir("1) Sexo: " + textoSexo);
		HerramientasConsola.imprimir("2) Cabello: " + textoCabello);
		HerramientasConsola.imprimir("3) Vehiculo: " + textoVehiculo);
		HerramientasConsola.imprimir("4) Senia: " + textoSenia);
		HerramientasConsola.imprimir("5) Hobby: " + textoHobby);
		HerramientasConsola.imprimir("6) Pedir orden de arresto");
		HerramientasConsola.imprimir("7) Volver");

		HerramientasConsola.imprimir("Ingrese opcion:");
		this.tramitarOpcion(HerramientasConsola.pedirOpcionEntre(1, 7));		
	}

	private void tramitarOpcion(String opcion) {
		if(opcion.equals("1"))
		{
			this.mostrarMenuSexo();
			this.mostrarDatosGuardados();
		}
		else if(opcion.equals("2"))
		{
			this.mostrarMenuCabello();
			this.mostrarDatosGuardados();
		}
		else if(opcion.equals("3"))
		{
			this.mostrarMenuVehiculo();
			this.mostrarDatosGuardados();
		}
		else if(opcion.equals("4"))
		{
			this.mostrarMenuSenia();
			this.mostrarDatosGuardados();
		}
		else if(opcion.equals("5"))
		{
			this.mostrarMenuHobby();
			this.mostrarDatosGuardados();
		}
		else if(opcion.equals("6"))
		{
			this.controlCrimen.pedirOrdenArresto();
		}
	}

	private void mostrarMenuSexo() {
		HerramientasConsola.imprimir("Elija sexo: ");
		int nroOp = 1;
		for(Sexo sexo : Sexo.values()){
			HerramientasConsola.imprimir(nroOp + ") " + sexo.name());
			nroOp++;
		}
		
		HerramientasConsola.imprimir(nroOp + ") Volver");
		
		Integer opElegida = Integer.parseInt(HerramientasConsola.pedirOpcionEntre(1, nroOp));
		if(opElegida!=nroOp){		
			Sexo sexoElegido = Sexo.values()[opElegida-1];
			this.juego.getJugadorActual().getInvestigacion().getDatosLadron().setSexo(sexoElegido);
		}
		
	}
	
	private void mostrarMenuSenia() {
		HerramientasConsola.imprimir("Elija senia: ");
		int nroOp = 1;
		for(Senia senia : Senia.values()){
			HerramientasConsola.imprimir(nroOp + ") " + senia.name());
			nroOp++;
		}
		
		HerramientasConsola.imprimir(nroOp + ") Volver");
		
		Integer opElegida = Integer.parseInt(HerramientasConsola.pedirOpcionEntre(1, nroOp));
		if(opElegida!=nroOp){		
			Senia seniaElegida = Senia.values()[opElegida-1];
			this.juego.getJugadorActual().getInvestigacion().getDatosLadron().setSenia(seniaElegida);		
		}
	}
	
	private void mostrarMenuVehiculo() {
		HerramientasConsola.imprimir("Elija vehiculo: ");
		int nroOp = 1;
		for(Vehiculo vehiculo : Vehiculo.values()){
			HerramientasConsola.imprimir(nroOp + ") " + vehiculo.name());
			nroOp++;
		}
		HerramientasConsola.imprimir(nroOp + ") Volver");
		
		Integer opElegida = Integer.parseInt(HerramientasConsola.pedirOpcionEntre(1, nroOp));
		if(opElegida!=nroOp){		
			Vehiculo vehiculoElegido = Vehiculo.values()[opElegida-1];
			this.juego.getJugadorActual().getInvestigacion().getDatosLadron().setVehiculo(vehiculoElegido);	
		}
			
	}
	
	private void mostrarMenuCabello() {
		HerramientasConsola.imprimir("Elija cabello: ");
		int nroOp = 1;
		for(Cabello cabello : Cabello.values()){
			HerramientasConsola.imprimir(nroOp + ") " + cabello.name());
			nroOp++;
		}
		
		HerramientasConsola.imprimir(nroOp + ") Volver");
		
		Integer opElegida = Integer.parseInt(HerramientasConsola.pedirOpcionEntre(1, nroOp));
		if(opElegida!=nroOp){			
			Cabello cabelloElegido = Cabello.values()[opElegida-1];
			this.juego.getJugadorActual().getInvestigacion().getDatosLadron().setCabello(cabelloElegido);	
		}
	}
	
	private void mostrarMenuHobby() {
		HerramientasConsola.imprimir("Elija hobby: ");
		int nroOp = 1;
		for(Hobby hobby : Hobby.values()){
			HerramientasConsola.imprimir(nroOp + ") " + hobby.name());
			nroOp++;
		}
		
		HerramientasConsola.imprimir(nroOp + ") Volver");
		
		Integer opElegida = Integer.parseInt(HerramientasConsola.pedirOpcionEntre(1, nroOp));
		if(opElegida!=nroOp){		
			Hobby hobbyElegido = Hobby.values()[opElegida-1];
			this.juego.getJugadorActual().getInvestigacion().getDatosLadron().setHobby(hobbyElegido);	
		}
	}

}
